home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / ffccflow / ffccflow.lha / ffccc+flow / ffccc / floppy.vmsfor < prev    next >
Text File  |  1992-07-31  |  14KB  |  448 lines

  1.       PROGRAM FLOPPY
  2. C-------------------------------------------------------------------------
  3. C Floppy VAX VMS interface routine.
  4. C Sets up various required input files for Floppy.
  5. C Julian Bunn 1987
  6. C-------------------------------------------------------------------------
  7.       PARAMETER (MLEN=256,MXLIN=80)
  8.       INTEGER*4 STATUS,CLI$GET_VALUE,CLI$PRESENT
  9.       INTEGER*4 LIB$FIND_FILE,LIB$FIND_FILE_END
  10.       INCLUDE '($SSDEF)'
  11.       INCLUDE '($RMSDEF)'
  12.       INCLUDE '($LBRDEF)'
  13.       EXTERNAL CLI$_PRESENT,CLI$_DEFAULTED,CLI$_ABSENT,CLI$_NEGATED
  14.       CHARACTER*(MXLIN) CIN,CINS,CIN2,CARD
  15.       CHARACTER*(MLEN)  CFILE,CIFOR,CSCRT,CIGNO,CFORT,CFLOP,CTREE,CTEMP
  16.       CHARACTER*(MXLIN) CTEMPL
  17.       CHARACTER*(MLEN) CFORAN
  18.       LOGICAL LOG
  19.       CHARACTER*(MLEN) CMMND
  20. C
  21. C Log this use of FLOPPY using UMON
  22. C
  23.       STATUS = LIB$GET_FOREIGN(CFORAN,,,)
  24.       LFORAN = MIN(MXLIN,LENOCC(CFORAN))
  25.       CALL UMLOG('FLOPPY',CFORAN(:LFORAN))
  26. C
  27.       LOG = .FALSE.
  28. C
  29. C LOG
  30. C
  31.       STATUS = CLI$PRESENT('LOG')
  32.       IF(STATUS.EQ.%LOC(CLI$_PRESENT).OR.
  33.      &   STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  34.         LOG = .TRUE.
  35.       ENDIF
  36. C
  37. C INPUT FORTRAN
  38. C
  39.       STATUS = CLI$GET_VALUE('P1',CIN)
  40.       IF(.NOT.STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
  41.       IB = INDEX(CIN,']')
  42.       IF(IB.EQ.0) THEN 
  43.         IP = INDEX(CIN,'.')
  44.       ELSE
  45.         IP = INDEX(CIN(IB:),'.')
  46.       ENDIF
  47.       IF(IP.EQ.0) CIN = CIN(:LENOCC(CIN))//'.FOR'
  48.       IF(LOG) WRITE(6,'(2A)') ' Floppy --> Input Fortran  :',
  49.      &                         CIN(:LENOCC(CIN))
  50. C
  51. C EXTRACT STEM NAME
  52. C
  53.       NFILE = 0
  54.    88 CONTINUE   
  55.       STATUS = LIB$FIND_FILE(CIN,CTEMP,I)
  56.       IF(.NOT.STATUS.AND.NFILE.EQ.0) THEN
  57.         IF(LOG)WRITE(6,'(3A)') ' File ',CIN(:LENOCC(CIN)),' absent !'
  58.         CALL LIB$SIGNAL(%VAL(STATUS))
  59.         GOTO 1000
  60.       ENDIF
  61.       IF(.NOT.STATUS) GOTO 99
  62.       NFILE = NFILE + 1
  63.       IF(NFILE.EQ.1) THEN
  64.         CIFOR = CTEMP
  65.         IPOSE = INDEX(CTEMP,']')
  66.         IPOSD = INDEX(CTEMP(IPOSE:MLEN),'.')
  67.         IF(IPOSE.EQ.0.OR.IPOSD.EQ.0) GOTO 998
  68.         CFILE = CTEMP(IPOSE+1:IPOSE+IPOSD-2)
  69.         LEN   = IPOSD-2
  70.       ELSE IF(NFILE.EQ.2) THEN
  71.         OPEN(11,FILE='FLOPTEMP.FOR',STATUS='SCRATCH',ERR=999)
  72.         OPEN(66,FILE=CIFOR(:LENOCC(CIFOR)),STATUS='OLD',READONLY)
  73.    77   READ(66,'(A)',END=76,ERR=76) CARD
  74.         WRITE(11,'(A)') CARD
  75.         GOTO 77
  76.    76   CLOSE(66)
  77.       ELSE
  78.         OPEN(66,FILE=CTEMP(:LENOCC(CTEMP)),STATUS='OLD',READONLY)
  79.    75   READ(66,'(A)',END=74,ERR=74) CARD
  80.         WRITE(11,'(A)') CARD
  81.         GOTO 75
  82.    74   CLOSE(66)
  83.       ENDIF
  84.       GOTO 88
  85.    99 STATUS = LIB$FIND_FILE_END(I)
  86.       IF(NFILE.GT.1) REWIND(11)
  87.       IF(LOG)WRITE(6,'(A,I2,A)') ' Floppy --> ',NFILE,
  88.      &       ' file(s) of input FORTRAN'
  89. C
  90. C OPEN FLOP INPUT FILE
  91. C
  92.       CSCRT = CFILE(:LEN)//'.FLOPINP'
  93.       OPEN(5,FILE=CSCRT(:LEN+8),ACCESS='SEQUENTIAL',
  94.      &     CARRIAGECONTROL='LIST',STATUS='SCRATCH',ERR=999)
  95. C
  96. C WRITE USUAL FLOP INPUT CARDS
  97. C
  98.       WRITE(5,'(A)') 'LIST,GLOBAL,TYPE;'
  99.       WRITE(5,'(A)') 'PRINT,ILLEGAL;'
  100.       WRITE(5,'(A)') 'OPTIONS,USER;'
  101. C
  102. C IGNORE FILE
  103. C
  104.       IOLD = 0
  105.       CIGNO = CFILE(:LEN)//'.FLOPIGN'
  106.       STATUS = CLI$PRESENT('OLD')
  107.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  108.         STATUS = CLI$GET_VALUE('OLD',CIN)
  109.         IF(.NOT.STATUS) THEN
  110.           CIN = CIGNO
  111.         ENDIF
  112.         IOLD = 1
  113.       ENDIF
  114.       STATUS = LIB$FIND_FILE(CIN,CTEMP,I)
  115.       IF(.NOT.STATUS.AND.IOLD.EQ.1) THEN
  116.       IF(LOG)WRITE(6,'(3A)') ' File ',CIN(:LENOCC(CIN)),' absent !'
  117.         CALL LIB$SIGNAL(%VAL(STATUS))
  118.         GOTO 999
  119.       ENDIF
  120.       STATUS = LIB$FIND_FILE_END(I)
  121.       IOPIG = 0
  122.       IF(IOLD.EQ.1) THEN
  123. C COPY OLD IGNORE FILE INTO BUFFER
  124. C
  125.         ICHK = 0
  126.         OPEN(94,FILE=CIN,READONLY,STATUS='OLD')
  127.         REWIND(94)
  128.         OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  129.      &       STATUS='SCRATCH',ERR=999)
  130.         IOPIG = 1
  131.    10   READ(94,'(A)',ERR=20,END=20) CARD
  132.         WRITE(15,'(A)') CARD
  133.         IF(INDEX(CARD,'CHECK RULE').NE.0) ICHK = 1
  134.         GOTO 10
  135.    20   CONTINUE
  136.         CLOSE(94)
  137.         CIGNO = CIN
  138.       ENDIF
  139.       LIGNO = LENOCC(CIGNO)
  140.       IF(LOG)WRITE(6,'(A,A)')
  141.      &' Floppy --> Ignore File    :',CIGNO(:LIGNO)
  142. C
  143. C FLOPPY OUTPUT
  144. C
  145.       CFLOP = ' '
  146.       STATUS = CLI$PRESENT('OUTPUT')
  147.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  148.         CFLOP = CFILE(:LEN)//'.FLOPOUT'
  149.         STATUS = CLI$GET_VALUE('OUTPUT',CIN)
  150.         IF(STATUS) CFLOP = CIN
  151.         IF(LOG)WRITE(6,'(A,A)') ' Floppy --> Output Listing :',
  152.      &                   CFLOP(:LENOCC(CFLOP))
  153.       ENDIF
  154. C
  155. C SOURCE FILE NUMBERS
  156. C
  157.       STATUS = CLI$PRESENT('FULL')
  158.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  159.         IF(LOG)WRITE(6,'(A,A)')
  160.      &  ' Floppy --> List source code line numbers'
  161.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  162.      &                 STATUS='NEW',ERR=999)
  163.         IOPIG = 1
  164.         WRITE(15,'(A)') '*FULL'
  165.       ENDIF
  166. C
  167. C IGNORABLE NAMES
  168. C
  169.       STATUS = CLI$PRESENT('IGNORE')
  170.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  171.         IF(LOG)WRITE(6,'(A,A)') ' Floppy --> Ignore following names'
  172.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  173.      &                 STATUS='NEW',ERR=999)
  174.         IOPIG = 1
  175.         NVALU = 0
  176.    50   STATUS = CLI$GET_VALUE('IGNORE',CIN)
  177.         IF(STATUS.NE.%LOC(CLI$_ABSENT)) THEN
  178.           WRITE(15,'(A)') CIN(:LENOCC(CIN))
  179.           NVALU = NVALU+1
  180.           IF(LOG)WRITE(6,'(A,I3,A,A)')
  181.      &    ' Floppy --> Ignore name',NVALU,' = ',CIN(:LENOCC(CIN))
  182.           GOTO 50
  183.         ENDIF
  184.       ENDIF
  185. C
  186. C RULE CHECKING
  187. C
  188.       STATUS = CLI$PRESENT('CHECKS')
  189.       IF(STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  190.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  191.      &                 STATUS='NEW',ERR=999)
  192.         IOPIG = 1
  193.         IF(ICHK.EQ.0) THEN 
  194.            WRITE(15,'(A)') '*CHECK RULE *'
  195.            IF(LOG) WRITE(6,'(A)') 
  196.      &     ' Floppy --> Check standard set of rules'
  197.         ELSE
  198.            IF(LOG) WRITE(6,'(A,A)') ' Floppy --> Check rules ',
  199.      &                              'specified in OLD file'
  200.         ENDIF
  201.       ELSE IF(STATUS.EQ.%LOC(CLI$_NEGATED)) THEN
  202.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  203.      &                 STATUS='NEW',ERR=999)
  204.         IOPIG = 1
  205.         WRITE(15,'(A)') '*CHECK RULE -99'
  206.         IF(LOG) WRITE(6,'(A)') ' Floppy --> No rule checking'
  207.       ELSE IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  208.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  209.      &                 STATUS='NEW',ERR=999)
  210.         IOPIG = 1
  211.         CTEMPL(:MXLIN) = ' '
  212.         NRULE = 0
  213.    30   STATUS = CLI$GET_VALUE('CHECKS',CIN)
  214.         IF(STATUS.NE.%LOC(CLI$_ABSENT)) THEN
  215.           IF(LENOCC(CIN).EQ.1) CIN(:2) = ' '//CIN(:1)
  216.           IF(INDEX(CIN,'-').EQ.0.OR.LENOCC(CIN).EQ.2) THEN
  217.              WRITE(15,'(A,A)') '*CHECK RULE  ',CIN
  218.           ELSE
  219.              WRITE(15,'(A,A)') '*CHECK RULE ',CIN
  220.           ENDIF 
  221.           IF(CTEMPL.NE.' ') THEN
  222.              CTEMPL = CTEMPL(:LENOCC(CTEMPL))//','//CIN(:LENOCC(CIN))
  223.           ELSE
  224.              CTEMPL = CIN(:LENOCC(CIN))
  225.           ENDIF 
  226.           NRULE = NRULE + 1
  227.           IF(LENOCC(CTEMPL).GT.MXLIN-20) THEN
  228.             IF(LOG) WRITE(6,'(A,I2,A)') ' Floppy --> Check ',NRULE,
  229.      &              ' rules :'//CTEMPL(:LENOCC(CTEMPL))
  230.             CTEMPL(:MXLIN) = ' '
  231.           ENDIF
  232.           GOTO 30
  233.         ENDIF
  234.         IF(LOG.AND.LENOCC(CTEMPL).GT.0) 
  235.      &          WRITE(6,'(A,I2,A)')' Floppy --> Check ',NRULE,          
  236.      &          ' rules :'//CTEMPL(:LENOCC(CTEMPL))
  237.       ENDIF
  238. C
  239. C TREE PROGRAM
  240. C
  241.       STATUS = CLI$PRESENT('TREE')
  242.       CTREE = ' '
  243.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  244.         WRITE(5,'(A)') 'OPTIONS,TREE;'
  245.         CTREE = CFILE(:LEN)//'.FLOPTRE'
  246.         IF(LOG)WRITE(6,'(A,A)')
  247.      &  ' Floppy --> Tree output    : ',CTREE(:LENOCC(CTREE))
  248.       ENDIF
  249. C
  250. C SPECIAL PROCESSING
  251. C
  252.       STATUS = CLI$PRESENT('SPECIAL')
  253.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  254.         STATUS= CLI$GET_VALUE('SPECIAL',CIN)
  255.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  256.      &                 STATUS='NEW',ERR=999)
  257.         IOPIG = 1
  258.         WRITE(15,'(A)') '*'//CIN(:20)
  259.         IF(LOG)WRITE(6,'(A,A)')
  260.      &   ' Floppy --> Invoke special process for  :',
  261.      &                   CIN(:LENOCC(CIN))
  262.       ELSE IF(STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  263.         IF(IOPIG.EQ.0) OPEN(15,FILE=CIGNO(:LIGNO),ACCESS='SEQUENTIAL',
  264.      &                 STATUS='NEW',ERR=999)
  265.         IOPIG = 1
  266.         WRITE(15,'(A)') '*CHECK RULE *'
  267.         IF(LOG)WRITE(6,'(A)')
  268.      &   ' Floppy --> Check standard set of rules'          
  269.       ENDIF
  270. C
  271. C TIDY OPTION
  272. C
  273.       ITIDY = 0
  274.       STATUS = CLI$PRESENT('TIDY')
  275.       IF(STATUS.NE.%LOC(CLI$_PRESENT)) GOTO 100
  276.       ITIDY = 1
  277.       IF(LOG)WRITE(6,'(A,A)')   ' Floppy --> FLOP options to tidy code '
  278. C
  279. C OUTPUT FORTRAN
  280. C
  281.       CFORT = CFILE(:LEN)//'.FLOPFOR'
  282.       STATUS = CLI$PRESENT('FORTRAN')
  283.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  284.         STATUS = CLI$GET_VALUE('FORTRAN',CIN)
  285.         IF(STATUS) CFORT = CIN
  286.       ENDIF
  287.       WRITE(5,'(A)') 'OUTPUT,FULL,COMPRESS;'
  288.       IF(LOG)WRITE(6,'(A,A)') ' Floppy --> Output Fortran :',
  289.      &                 CFORT(:LENOCC(CFORT))
  290. C
  291. C INDENT OPTION
  292. C
  293.       STATUS = CLI$PRESENT('INDENT')
  294.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  295.         STATUS = CLI$GET_VALUE('INDENT',CIN)
  296.         IF(LOG)WRITE(6,'(A,A)')
  297.      &  ' Floppy --> Indent by ',CIN(:LENOCC(CIN))
  298.         WRITE(5,'(A)') 'OPTIONS,INDENT='//CIN(:LENOCC(CIN))//';'
  299.       ENDIF
  300. C
  301. C GROUPF
  302. C
  303.       STATUS = CLI$PRESENT('GROUPF')
  304.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  305.         IF(LOG)WRITE(6,'(A)')
  306.      &  ' Floppy --> Group FORMAT at end of module'
  307.         WRITE(5,'(A)') 'STATEMENTS,SEPARATE;'
  308.       ENDIF
  309. C
  310. C GOTOS
  311. C
  312.       STATUS = CLI$PRESENT('GOTOS')
  313.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  314.         IF(LOG)WRITE(6,'(A)') ' Floppy --> Shift GOTOs to the right'
  315.         WRITE(5,'(A)') 'STATEMENTS,GOTO;'
  316.       ENDIF
  317. C
  318. C RENUMBER FORMATS
  319. C
  320.       STATUS = CLI$PRESENT('FORMAT')
  321.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  322.         STATUS = CLI$PRESENT('FORMAT.START')
  323.         CINS = '500'
  324.         IF(STATUS.EQ.%LOC(CLI$_PRESENT).OR.
  325.      &     STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  326.           STATUS = CLI$GET_VALUE('FORMAT.START',CIN)
  327.           IF(LOG)WRITE(6,'(A,A)')
  328.      &    ' Floppy --> Renumber FORMAT, start at ',
  329.      &                      CIN(:LENOCC(CIN))
  330.           CINS = CIN
  331.         ENDIF
  332.         STATUS = CLI$PRESENT('FORMAT.STEP')
  333.         CIN2 = '10'
  334.         IF(STATUS.EQ.%LOC(CLI$_PRESENT).OR.
  335.      &     STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  336.           STATUS = CLI$GET_VALUE('FORMAT.STEP',CIN)
  337.           IF(LOG)WRITE(6,'(A,A)')
  338.      &    ' Floppy --> Renumber FORMAT, step by ',
  339.      &                     CIN(:LENOCC(CIN))
  340.           CIN2 = CIN
  341.         ENDIF
  342.         WRITE(5,'(A,A)') 'STATEMENTS,FORMAT='//CINS(:LENOCC(CINS))//','
  343.      &                  ,CIN2(:LENOCC(CIN2))//';'
  344.       ENDIF
  345. C
  346. C RENUMBER STATEMENTS
  347. C
  348.       STATUS = CLI$PRESENT('STMNTS')
  349.       IF(STATUS.EQ.%LOC(CLI$_PRESENT)) THEN
  350.         STATUS = CLI$PRESENT('STMNTS.START')
  351.         CINS = '10'
  352.         IF(STATUS.EQ.%LOC(CLI$_PRESENT).OR.
  353.      &     STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  354.           STATUS = CLI$GET_VALUE('STMNTS.START',CIN)
  355.           IF(LOG)WRITE(6,'(A,A)')
  356.      &    ' Floppy --> Renumber STATEMENTS, start at',
  357.      &                     CIN(:LENOCC(CIN))
  358.           CINS = CIN
  359.         ENDIF
  360.         STATUS = CLI$PRESENT('STMNTS.STEP')
  361.         CIN2 = '10'
  362.         IF(STATUS.EQ.%LOC(CLI$_PRESENT).OR.
  363.      &     STATUS.EQ.%LOC(CLI$_DEFAULTED)) THEN
  364.           STATUS = CLI$GET_VALUE('STMNTS.STEP',CIN)
  365.           IF(LOG)WRITE(6,'(A,A)')
  366.      &    ' Floppy --> Renumber STATEMENTS, step by ',
  367.      &                     CIN(:LENOCC(CIN))
  368.           CIN2 = CIN
  369.         ENDIF
  370.         WRITE(5,'(A,A)') 'STATEMENTS,NUMBER='//CINS(:LENOCC(CINS))//','
  371.      &                  ,CIN2(:LENOCC(CIN2))//';'
  372.       ENDIF
  373. C
  374.       WRITE(5,'(A)') 'END;'
  375. C
  376.   100 CONTINUE
  377. C
  378.       IF(LOG)WRITE(6,'(A)')
  379.      &' Floppy --> Finished parsing command string'
  380. C
  381. C
  382. C open LUNs for FLOPPY
  383. C
  384.       IF(NFILE.EQ.1) THEN
  385.       OPEN(11,FILE=CIFOR(:LENOCC(CIFOR)),READONLY,STATUS='OLD',ERR=999)
  386.       ENDIF
  387.       OPEN(99,FILE='FLOPTEMP.TXT',STATUS='SCRATCH',ERR=999)
  388.       IF(IOPIG.NE.0) THEN
  389.         REWIND(15)
  390.       ELSE
  391.         OPEN(15,FILE='FLOPTEMP.IGN',STATUS='SCRATCH',ERR=999)
  392.       ENDIF
  393.       IFOR = 0
  394.       IF(ITIDY.EQ.0) THEN
  395.         OPEN(14,FILE='FLOPTEMP.FOR',STATUS='SCRATCH',ERR=999)
  396.         IFOR = 1
  397.       ELSE
  398.         OPEN(14,FILE=CFORT(:LENOCC(CFORT)),STATUS='NEW',
  399.      &       CARRIAGECONTROL='LIST',ERR=999)
  400.         IFOR = 1
  401.       ENDIF
  402.       IOUT = 0
  403.       IF(CFLOP.NE.' ') THEN
  404.         OPEN(6,FILE=CFLOP(:LENOCC(CFLOP)),STATUS='NEW',ERR=999)
  405.         IOUT = 1
  406.       ENDIF
  407.       ITRE = 0
  408.       IF(CTREE.NE.' ') THEN
  409.         OPEN(50,FILE=CTREE(:LENOCC(CTREE)),STATUS='NEW',
  410.      &       FORM='UNFORMATTED',ERR=999)
  411.         ITRE = 1
  412.       ENDIF
  413.       REWIND(5)
  414. C
  415. C now call floppy
  416. C
  417.       CALL ALLPRO
  418. C
  419.       CLOSE(15)
  420.       IF(ITRE.EQ.1) CLOSE(50)
  421.       IF(IFOR.EQ.1) CLOSE(14)
  422.       CLOSE(11)
  423.       CLOSE(99)
  424.       IF(IOUT.EQ.1) CLOSE(6)
  425. C
  426. C LOG SUCCESSFUL COMPLETION
  427. C
  428.       CALL UMLOG('FLOPPY','Successful completion')
  429. C
  430.       GOTO 2000
  431. C
  432.   998 CONTINUE
  433.       WRITE(6,'(A)') ' Error parsing source Fortran name '
  434.       GOTO 1000
  435.   999 CONTINUE
  436.       WRITE(6,'(A)') ' Error opening a Floppy file '
  437.  1000 WRITE(6,500)
  438.   500 FORMAT( /,1X,'***********************************************',
  439.      &        /,1X,'*                 F L O P P Y                 *',
  440.      &        /,1X,'*                   ABORTED                   *',
  441.      &        /,1X,'*          in job preparation stage.          *',
  442.      &        /,1X,'***********************************************')
  443.  2000 CONTINUE
  444.       CALL SYS$EXIT(%VAL(1))      
  445.       END
  446.